import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author debroizr
 */
public class Confirmation {

    public static void confirmation(Connection conn) throws SQLException {
        System.out.println("\n*** Confirmer l'arrivée d'un vol : ***");
        confirmerVol(conn);
    }
    
    /**
     * confirmerVol effectue les opérations nécessaires à la confirmation
     * d'un vol.
     *
     * @param conn : Connexion à la base de donnée
     * @throws SQLException : Rollback si la transcation a rencontré une erreur.
     */
    private static void confirmerVol(Connection conn) throws SQLException {
        PreparedStatement stmt;
        Vector listeVol = new Vector();
        int numVol;
        String dateVol;
        String typeVol;
        Scanner sc = new Scanner(System.in);
        
        try {
            System.out.println("Quel type de vol voulez-vous confirmer ? (Fret/Passager)");
            typeVol = LectureClavier.lireChaine();
            
            if(typeVol.equals("Fret")) {
                //Vol non terminé pouvant être confirmé
                stmt = conn.prepareStatement("Select NumVolF, DateVolF From VolsFret Where Termine = 'n'");
                
                ResultSet resultat = stmt.executeQuery();
                while (resultat.next()) {
                    //Affichage des vols
                    numVol = Integer.parseInt(resultat.getString("NumVolF"));
                    dateVol = resultat.getString("DateVolF");
                    System.out.println("Numéro de vol non terminé : " + numVol + " Date du vol : " + dateVol);
                    listeVol.add(numVol);
                }
                
                numVol = LectureClavier.lireEntier("Veuillez indiquer le vol à terminer :");
                
                //Verification du vol
                while (!Suppression.volExistant(numVol, listeVol)) {
                    numVol = sc.nextInt();
                } 
                
                System.out.println("Date du vol à confirmer (format DD-MON-YY) :");
                dateVol = LectureClavier.lireChaine();

                //Vérification de la date
                while (!Suppression.isDateValid(dateVol)) {
                    System.out.println("Date du vol à confirmer (format DD-MON-YY) :\n");
                    dateVol = LectureClavier.lireChaine();
                }
                
                /* Choix du niveau d'isolation */
                conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
                
                stmt = conn.prepareStatement("Update VolsFret Set Termine = 'o' Where NumVolF = " + numVol
                    + " And trunc(DateVolF) = to_date(?, 'DD-MON-YY')");
                stmt.setString(1, dateVol);
                stmt.executeQuery();
                
                //Si la transaction est validée on commit
                conn.commit();
            }
            
            else if(typeVol.equals("Passager")) {
                //Vol non terminé pouvant être confirmé
                stmt = conn.prepareStatement("Select NumVolP, DateVolP From VolsPassagers Where Termine = 'n'");
                
                ResultSet resultat = stmt.executeQuery();
                while (resultat.next()) {
                    //Affichage des vols
                    numVol = Integer.parseInt(resultat.getString("NumVolP"));
                    dateVol = resultat.getString("DateVolP");
                    System.out.println("Numéro de vol non terminé : " + numVol + " Date du vol : " + dateVol);
                    listeVol.add(numVol);
                }
                
                numVol = LectureClavier.lireEntier("Veuillez indiquer le vol à terminer :");
                
                //Verification du vol
                while (!Suppression.volExistant(numVol, listeVol)) {
                    numVol = sc.nextInt();
                } 
                
                System.out.println("Date du vol à confirmer (format DD-MON-YY) :");
                dateVol = LectureClavier.lireChaine();

                //Vérification de la date
                while (!Suppression.isDateValid(dateVol)) {
                    System.out.println("Date du vol à confirmer (format DD-MON-YY) :\n");
                    dateVol = LectureClavier.lireChaine();
                }
                
                stmt = conn.prepareStatement("Update VolsPassagers Set Termine = 'o' Where NumVolP = " + numVol
                    + " And trunc(DateVolP) = to_date(?, 'DD-MON-YY')");
                stmt.setString(1, dateVol);
                stmt.executeQuery();
                
                //Si la transaction est validée on commit
                conn.commit();
            }
            
            else {
                System.out.println("Vol non valide.");
                AirChance.menu();
            }
            
        } catch (SQLException ex) {
            conn.rollback();
            System.out.println("La confirmation du vol a rencontré une erreur.");
            Logger.getLogger(AirChance.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
